package com.ltx.bugseeker.common;

/**
 * 统一响应状态码枚举类
 * 定义系统中所有可能的响应状态码和对应的消息
 * 
 * @author ltx
 * @since 2025-10-20 14:43:42
 */
public enum ResultCode {
    
    /**
     * 成功状态码
     */
    SUCCESS(200, "操作成功"),
    
    /**
     * 客户端错误状态码 4xx
     */
    BAD_REQUEST(400, "请求参数错误"),
    UNAUTHORIZED(401, "未授权访问"),
    FORBIDDEN(403, "禁止访问"),
    NOT_FOUND(404, "资源不存在"),
    METHOD_NOT_ALLOWED(405, "请求方法不允许"),
    
    /**
     * 业务逻辑错误状态码 4xx
     */
    USER_NOT_FOUND(4001, "用户不存在"),
    USER_ALREADY_EXISTS(4002, "用户已存在"),
    INVALID_PASSWORD(4003, "密码错误"),
    ACCOUNT_DISABLED(4004, "账户已被禁用"),
    ACCOUNT_LOCKED(4005, "账户已被锁定"),
    TOKEN_EXPIRED(4006, "令牌已过期"),
    TOKEN_INVALID(4007, "令牌无效"),
    INVALID_TOKEN(4008, "无效令牌"),
    PARAM_ERROR(4009, "参数错误"),
    
    /**
     * 短信验证码相关错误状态码 41xx
     */
    SMS_SEND_FAILED(4101, "短信发送失败"),
    SMS_SEND_FREQUENCY_LIMIT(4102, "短信发送过于频繁，请稍后再试"),
    SMS_CODE_EXPIRED(4103, "验证码已过期"),
    SMS_CODE_INVALID(4104, "验证码错误"),
    SMS_VERIFY_ATTEMPTS_EXCEEDED(4105, "验证码尝试次数过多，请重新获取"),
    PHONE_ALREADY_EXISTS(4106, "手机号已存在"),
    PASSWORD_MISMATCH(4107, "两次输入的密码不一致"),
    
    /**
     * 服务器错误状态码 5xx
     */
    INTERNAL_SERVER_ERROR(500, "服务器内部错误"),
    SYSTEM_ERROR(500, "系统错误"),
    DATABASE_ERROR(5001, "数据库操作异常"),
    REDIS_ERROR(5002, "Redis操作异常"),
    EXTERNAL_SERVICE_ERROR(5003, "外部服务调用异常");
    
    /**
     * 状态码
     */
    private final int code;
    
    /**
     * 状态消息
     */
    private final String message;
    
    /**
     * 构造函数
     * 
     * @param code 状态码
     * @param message 状态消息
     */
    ResultCode(int code, String message) {
        this.code = code;
        this.message = message;
    }
    
    /**
     * 获取状态码
     * 
     * @return 状态码
     */
    public int getCode() {
        return code;
    }
    
    /**
     * 获取状态消息
     * 
     * @return 状态消息
     */
    public String getMessage() {
        return message;
    }
}